/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ac.logic;

import ac.entities.Caracteristica;
import ac.entities.Causa;
import ac.entities.Clasificacion;
import ac.entities.Enfermedad;
import ac.entities.Especie;
import ac.entities.Hecho;
import ac.entities.Lugar;
import ac.entities.NecesidadNutricional;
import ac.entities.Nutricion;
import ac.entities.Sintoma;
import ac.entities.Taxonomia;
import ac.persistence.PersistClasificacion;
import ac.persistence.PersistEspecie;
import ac.persistence.PersistLugar;
import java.util.ArrayList;

/**
 *
 * @author freddy
 */
public class LogicEspecie {
    
    PersistClasificacion persist = new PersistClasificacion();
    PersistEspecie persistEspecie = new PersistEspecie();
    PersistLugar persistLugar = new PersistLugar();

    public boolean insertClasificacion(Taxonomia taxo){
        
        boolean result = false;
        boolean result2 = false;
        Clasificacion clasificacion = new Clasificacion();
        
        ArrayList taxonomia = new ArrayList();
        taxonomia.add("subtipo");
        taxonomia.add(taxo.getSubtipo());
        taxonomia.add("clase");
        taxonomia.add(taxo.getClase());
        taxonomia.add("subclase");
        taxonomia.add(taxo.getSubclase());
        taxonomia.add("orden");
        taxonomia.add(taxo.getOrden());
        taxonomia.add("familia");
        taxonomia.add(taxo.getFamilia());
        taxonomia.add("genero");
        taxonomia.add(taxo.getGenero());
        String nombre = null;
        String tipo = null;
        int padre=0;

            for (int i = 0; i < taxonomia.size(); i++) {
                tipo = taxonomia.get(i).toString();
                nombre = taxonomia.get(i+1).toString();
                Clasificacion cla =persist.buscarClasificacionPorNombre(tipo,nombre);
                    if(cla==null){
                        clasificacion.setIdClasificacion(persist.buscarUltimaClasificacion()+1);
                            if(i==0){
                                clasificacion.setIdPadre(clasificacion.getIdClasificacion());
                            }
                            else{
                                clasificacion.setIdPadre(padre);
                            }
                        clasificacion.setTipo(taxonomia.get(i).toString());
                        clasificacion.setNombre(taxonomia.get(i+1).toString());
                        result = persist.insertClasificacion(clasificacion);
                        padre = clasificacion.getIdClasificacion();
                    }else{

                        System.out.println("LOGICA PADRE: " + padre);
                        if(i==0){
                                padre=cla.getIdPadre();
                            }
                        if(!persist.buscarClasificacionPorId(cla.getIdPadre()).
                                getNombre().equalsIgnoreCase(persist.
                                buscarClasificacionPorId(padre).getNombre())){
                            
                            return false; 
                        }else{
                            result=true;
                            padre=cla.getIdClasificacion();
                        }
                    }
                i++;
            }
        return result;
    }

    public boolean insertEspecie(String nombreEsp, String nombreLat,
            int cuarentena,String convivencia, String tipoAgua, String reconocible,
            String descripcion, String historia,String genero, String continente,
            String pais){
            Lugar lug = new Lugar();

//        if(persistEspecie.buscarLugarPorNombre(pais)!=null){
//            lug = persistEspecie.buscarLugarPorNombre(pais);
//        }else{
//            lug.setId(persistEspecie.buscarUltimoLugar()+1);
//            lug.setIdPadre(persistEspecie.buscarLugarPorNombre(continente).getId());
//            lug.setNombre(pais);
//            lug.setTipo("pais");
//            persistLugar.insertLugar(lug);
//        }
        Clasificacion cla;
        cla=persist.buscarClasificacionPorNombre("genero", genero);
        boolean resultado = false;
        Especie nueva = new Especie(persistEspecie.buscarUltimaEspecie()+1,
                cuarentena,cla.getIdClasificacion(),2,nombreEsp,nombreLat,
                reconocible,historia,descripcion,convivencia,tipoAgua);
        resultado = persistEspecie.insertEspecie(nueva);
        return resultado;
    }

    public boolean insertCaracteristica(ArrayList caracteristicas){
        boolean result = false;
        Caracteristica carac = new Caracteristica();

        for (int i = 0; i < caracteristicas.size(); i++) {
           carac.setNombre(caracteristicas.get(i).toString());
           carac.setDescripcion(caracteristicas.get(i+1).toString());
           carac.setIdCaracteristica(persistEspecie.buscarUltimaCaracteristica()+1);
           carac.setIdEspecie(persistEspecie.buscarUltimaEspecie());
           result = persistEspecie.insertCaracteristica(carac);
           i++;
        }

        return result;

    }

    public boolean insertNecesidad(Nutricion nutricion){
        boolean result = false;
        NecesidadNutricional necesidad = new NecesidadNutricional();

        ArrayList necesidades = new ArrayList();
        necesidades.add("proteina");
        necesidades.add(nutricion.getProteina());
        necesidades.add("grasa");
        necesidades.add(nutricion.getGrasa());
        necesidades.add("carbohidratos");
        necesidades.add(nutricion.getCarbohidratos());
        necesidades.add("vitamina");
        necesidades.add(nutricion.getVitamina());
        necesidades.add("fibra");
        necesidades.add(nutricion.getFibra());
        necesidades.add("minerales");
        necesidades.add(nutricion.getMinerales());

            for (int i = 0; i < necesidades.size(); i++) {
                necesidad.setTipo(necesidades.get(i).toString());
                necesidad.setPorcentaje(necesidades.get(i+1).toString());
                necesidad.setIdNecesidad(persistEspecie.buscarUltimaNecesidad()+1);
                necesidad.setIdEspecie(persistEspecie.buscarUltimaEspecie());
                result = persistEspecie.insertNecesidad(necesidad);
                i++;
            }

        return result;
    }

    public boolean insertHecho(ArrayList hechos){
        boolean result= false;
        Hecho hecho = new Hecho();

        for (int i = 0; i < hechos.size(); i++) {
            hecho.setAñoInicio(Integer.parseInt(hechos.get(i).toString()));

            if(hechos.get(i+1).equals("")){

            }else{
                hecho.setAñoFin(Integer.parseInt(hechos.get(i+1).toString()));
            }
            
            hecho.setDescripcion(hechos.get(i+2).toString());
            hecho.setIdEspecie(persistEspecie.buscarUltimaEspecie());
            result = persistEspecie.insertHecho(hecho);
            i=i+2;
        }

        return result;
    }

    public boolean insertEnfermedad(ArrayList lista){
        boolean result = false;
        Enfermedad enfermedad = new Enfermedad();

        for (int i = 0; i < lista.size(); i++) {
           enfermedad.setNombre(lista.get(i).toString());
           enfermedad.setTipo(lista.get(i+1).toString());
           enfermedad.setDescripcion(lista.get(i+2).toString());
           result = persistEspecie.insertEnfermedad(enfermedad);
           i = i+2;
        }


        return result;
    }

    public boolean insertSintoma(ArrayList lista){
        boolean result = false;
        Sintoma sintoma = new Sintoma();

        for (int i = 0; i <lista.size(); i++) {

            if(persistEspecie.buscarSintomaPorNombre(lista.get(i).toString())==null){
                sintoma.setNombre(lista.get(i).toString());
                sintoma.setDescripcion(lista.get(i+1).toString());
                sintoma.setIdSintoma(persistEspecie.buscarUltimoSintoma()+1);
                result = persistEspecie.insertSintoma(sintoma);
            }
            i++;
        }

        return result;
    }

    public boolean insertCausa(ArrayList lista){
        boolean result = false;
        Causa causa = new Causa();

        for (int i = 0; i <lista.size(); i++) {

            if(persistEspecie.buscarCausaPorNombre(lista.get(i).toString())==null){
                causa.setDescripcion(lista.get(i).toString());
                causa.setTipo(lista.get(i+1).toString());
                causa.setIdCausa(persistEspecie.buscarUltimaCausa()+1);
                result = persistEspecie.insertCausa(causa);
            }
            i++;
        }

        return result;
    }

    public Especie buscarEspecieId (int id) {
        PersistEspecie pe = new PersistEspecie();
        return pe.buscarEspeciePorId(id);
    }
}
